/* eslint-disable */
(function() {
    'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
    var defineProperty = (function() {
        // IE 8 only supports `Object.defineProperty` on DOM elements
        try {
            var object = {};
            var $defineProperty = Object.defineProperty;
            var result = $defineProperty(object, object, object) && $defineProperty;
        } catch (error) {}
        return result;
    })();
    var toString = {}.toString;
    var startsWith = function(search) {
        if (this == null) {
            throw TypeError();
        }
        var string = String(this);
        if (search && toString.call(search) === '[object RegExp]') {
            throw TypeError();
        }
        var stringLength = string.length;
        var searchString = String(search);
        var searchLength = searchString.length;
        var position = arguments.length > 1 ? arguments[1] : undefined;
        // `ToInteger`
        var pos = position ? Number(position) : 0;
        if (pos != pos) {
            // better `isNaN`
            pos = 0;
        }
        var start = Math.min(Math.max(pos, 0), stringLength);
        if (searchLength + start > stringLength) {
            return false;
        }
        var index = -1;
        while (++index < searchLength) {
            if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {
                return false;
            }
        }
        return true;
    };
    if (defineProperty) {
        defineProperty(String.prototype, 'startsWith', {
            value: startsWith,
            configurable: true,
            writable: true,
        });
    } else {
        String.prototype.startsWith = startsWith;
    }
})();
